package ProductionConsumption;

/**
 * @Author mao
 * @Date 2025/11/22
 * @Description 超市类
 */
public class Supermarket {
    // 当前商品数量
    private int goods = 0;
    // 超市最多能存放的商品-超出不再生产
    private final int MAX_GOODS = 20;

    // 同步方法：生产商品
    public synchronized void produce(int producerId) throws InterruptedException {
        while (goods >= MAX_GOODS) {
            // 商品已满
            wait();
        }
        goods++;
        System.out.println("生产者 " + producerId + " 生产了1个商品，当前商品数量: " + goods);
        notifyAll(); // 唤醒所有等待的线程（消费者）
    }

    // 同步方法：消费商品
    public synchronized void consume(int consumerId) throws InterruptedException {
        while (goods <= 0) {
            // 商品全被消费
            System.out.println("消费者 " + consumerId + " 发现无货，等待中...");
            wait();
        }
        goods--;
        System.out.println("消费者 " + consumerId + " 购买了1个商品，当前商品数量: " + goods);
        notifyAll(); // 唤醒所有等待的线程（生产者）
    }
}
